package day02

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * @author wsl
 * @version 2022-10-12
 *          SparkSession内部封装了SparkContext
 */
object Save {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setAppName("spark sql").setMaster("local[*]")
    val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()

    val df: DataFrame = spark.read.json("sparksql/input/user.json")
    df.show()

    //  保存数据：csv  jdbc   json  orc   parquet  text
    // 注意：保存数据的相关参数需写到上述方法中。如：text需传入加载数据的路径，JDBC需传入JDBC相关参数。
    // 默认保存为parquet文件（可以修改conf.set("spark.sql.sources.default","json")）
    df.write.save("output")

    // 默认读取文件parquet
    spark.read.load("output").show()


    df.write.format("json").save("output2")

    //  可以指定为保存格式，直接保存，不需要再调用save了
    df.write.json("output1")

    //  如果文件已经存在则追加
    df.write.mode("append").json("output2")

    // 如果文件已经存在则忽略(文件存在不报错,也不执行;文件不存在,创建文件)
    df.write.mode("ignore").json("output2")

    // 如果文件已经存在则覆盖
    df.write.mode("overwrite").json("output2")

    // 默认default:如果文件已经存在则抛出异常
    // path file:/E:/ideaProject2/SparkSQLTest/output2 already exists.;
    df.write.mode("error").json("output2")


    spark.stop()


  }
}
